golang的ping检测网络实现 | 您所在的位置:网站首页 › 上位机CMD ping 服务器 延迟5ms如果降低 › golang的ping检测网络实现 |
golang ping 服务器,可以用系统调用也可以用go内置的库。 系统调用 func NetWorkStatus() bool { cmd := exec.Command("ping", "www.google.com", "-c", "4", "-W", "5") fmt.Println("NetWorkStatus Start:", time.Now().Unix()) err := cmd.Run() fmt.Println("NetWorkStatus End :", time.Now().Unix()) if err != nil { fmt.Println(err.Error()) return false } else { fmt.Println("Net Status , OK") } return true } 使用 ICMP Ping借用第三方的库 https://github.com/tatsushid/go-fastping 48 go-fastping 例子: p := fastping.NewPinger() ra, err := net.ResolveIPAddr("ip4:icmp", os.Args[1]) if err != nil { fmt.Println(err) os.Exit(1) } p.AddIPAddr(ra) p.OnRecv = func(addr *net.IPAddr, rtt time.Duration) { fmt.Printf("IP Addr: %s receive, RTT: %v\n", addr.String(), rtt) } p.OnIdle = func() { fmt.Println("finish") } err = p.Run() if err != nil { fmt.Println(err) }还有一个库使用也很方便 go-ping https://github.com/sparrc/go-ping 71 go-ping 使用例子: pinger, err := ping.NewPinger("www.google.com") if err != nil { panic(err) } pinger.Count = 3 pinger.Run() // blocks until finished stats := pinger.Statistics() // get send/receive/rtt stats不过上面两个例子都用到 ICMP,这需要以管理员身份运行。 如果只是想检查服务器的某个端口是否能连上,可以用下面的方式,速度更快 func CheckServer(){ timeout := time.Duration(5 * time.Second) t1 := time.Now() _, err := net.DialTimeout("tcp","www.google.com:443", timeout) fmt.Println("waist time :", time.Now().Sub(t1)) if err != nil { fmt.Println("Site unreachable, error: ", err) return } fmt.Println("tcp server is ok") }用http.Client 速度稍慢 func CheckServerHttp() { timeout := time.Duration(5 * time.Second) client := http.Client{ Timeout: timeout, } t1 := time.Now() resp, err := client.Get("https://www.google.com") fmt.Println("waist time :", time.Now().Sub(t1)) if err != nil { fmt.Println("client.Get, error: ", err) return } defer resp.Body.Close() fmt.Println(resp.Status) } |
CopyRight 2018-2019 实验室设备网 版权所有 |